#include "Pipe.h"

Pipe :: Pipe() {
	pipe ( this->descriptores );
	this->lectura = true;
	this->escritura = true;
}

void Pipe :: setearModo ( int modo ) {
	if ( modo == LECTURA ) {
		close ( this->descriptores[1] );
		this->descriptores[1] = -1;
		this->escritura = false;

	} else if ( modo == ESCRITURA ) {
		close ( this->descriptores[0] );
		this->descriptores[0] = -1;
		this->lectura = false;
	}
}

int Pipe :: escribir ( char* dato,int datoSize ) {
	if ( this->lectura ) {
		close ( this->descriptores[0] );
		this->lectura = false;
	}

	int resultado = -1;

	if ( this->escritura )
		resultado = write ( this->descriptores[1],dato,datoSize );

	return resultado;
}

int Pipe :: leer ( char* buffer,int buffSize ) {
	if ( this->escritura == true ) {
		close ( this->descriptores[1] );
		this->escritura = false;
	}

	int resultado = -1;
	if (this->lectura)
		resultado = read ( this->descriptores[0],buffer,buffSize );

	return resultado;
}

int Pipe :: getFdLectura () {
	return this->descriptores[0];
}

int Pipe :: getFdEscritura () {
	return this->descriptores[1];
}

bool Pipe :: esValido () {
	return (this->descriptores[1] > 0 || this->descriptores[0] > 0);
}

void Pipe :: cerrar () {
	if ( this->lectura == true ) {
		close ( this->descriptores[0] );
		this->lectura = false;
		this->descriptores[0] = -1;
	}

	if ( this->escritura == true ) {
		close ( this->descriptores[1] );
		this->escritura = false;
		this->descriptores[1] = -1;
	}
}

Pipe::~Pipe() {
}

